package objetos.aeronaves;

import juego.Escenario;
import movimiento.Posicion;
import movimiento.patrones.Huir;
import objetos.ObjetoNoControlado;
import objetos.armas.CuartoArmas;
import objetos.proyectiles.Proyectil;
import auxiliares.Vector;

/*
 * Clase que modela las caracter�sticas de las aeronaves enemigas
 */
public abstract class Enemigo extends ObjetoNoControlado {
	private CuartoArmas arsenal;
	private Vector velocidadHuida;
	private boolean huyendo;

	public Enemigo() {
		super();
		setBando("enemigo");
		this.huyendo = false;
		/* Creo las armas pero vacias */
		this.setArsenal(new CuartoArmas(this));
	}

	@Override
	public void retornarAlCombate() {
		int y = this.getPosicion().getEnY();
		int maxY = Escenario.getInstance().getMaxY();
		if (!this.huyendo) {
			if (y < -100 || y > maxY + 100) {
				int velocidadY = this.getVelocidad().getComponenteY();
				this.getVelocidad().setComponenteY(velocidadY * -1);

				setChanged();
				notifyObservers();
			}
		} else {
			if (y < -75) {
				this.destruir();
			}
		}
	}

	public void disparar() {
		/* Agrega al Escenario el proyectil nuevo. */
		Proyectil bala = this.getArsenal().disparar();
		if (bala != null) {
			Posicion pos = new Posicion(this.getPosicion().getEnX(), this
					.getPosicion().getEnY());
			bala.setPosicion(pos);
			Escenario.getInstance().agregarObjeto(bala);
		}
	}

	public void prepararParaHuida() {
		/*
		 * Cambia el patron del Objeto por Huir y su velocidad por la velocidad
		 * de huida
		 */
		this.huyendo = true;
		this.setVelocidad(velocidadHuida);
		this.setPatron(new Huir());

		this.setChanged();
		notifyObservers();
	}

	public boolean estaHuyendo() {
		return this.huyendo;
	}

	public void setArsenal(CuartoArmas arsenal) {
		this.arsenal = arsenal;
	}

	public CuartoArmas getArsenal() {
		return arsenal;
	}

	public Vector getVelocidadHuida() {
		return velocidadHuida;
	}

	public void setVelocidadHuida(Vector velocidadHuida) {
		this.velocidadHuida = velocidadHuida;
	}

}
